package club.jdiy.core.properties;

import club.jdiy.core.cache.CacheType;
import lombok.Data;

/**
 * JDiy 缓存配置信息映射对象
 *
 * @author ziquee(子秋) QQ号:39886616 主页: http://www.jdiy.club
 * @version 20200808
 */
@Data
public class JDiyCacheProperties {
    private CacheType type = CacheType.memcached;
    private MemcachedConfig memcached = new MemcachedConfig();
    private RedisConfig redis = new RedisConfig();

    @Data
    public static class RedisConfig {
        /**
         * 自定义redis缓存服务器配置信息．<br/>
         * 若未配置，则使用当前springBoot应用程序的默认redis配置.<br/><br/>
         *
         * redis连接地址和端口，例如： 127.0.0.1:6379
         * 若是集群模式,多个Node用逗号隔开，如： 192.168.0.27:6379,192.168.0.28:6379
         **/
        private String servers;
        /**
         * redis密码，默认为空（即表示无密码）
         */
        private String password;
    }

    @Data
    public static class MemcachedConfig {
        /**
         * 1.多节点配置方式（空格隔开）如：127.0.0.1:11211 127.0.0.1:11212
         * 2.备份节点配置(主从逗号隔开)，如：
         * 127.0.0.1:11211,127.0.0.1:11212 127.0.0.1:11212,127.0.0.1:11211
         * （表示11211和11212互为备份；  备份模式时需开启failureMode=true）
         **/
        private String servers = "127.0.0.1:11211";

        /**
         * 权重配置（空格分隔）若启用了多节点配置，weights权重与servers相对应，如：1 3
         * xmemcached的权重是通过复制连接的多个引用来实现的，
         * 比如权重为3，那么就复制3个同一个连接的引用放在集合中让MemcachedSessionLocator查找。
         */
        private String weights;

        /**
         * 若memcached服务开启了认证，下面三个参数按需指定登录认证信息
         */
        private SaslType sasl = SaslType.plain;
        private String username;
        private String password;

        /**
         * 所谓failure模式是指，当一个memcached节点down掉的时候，
         * 发往这个节点的请求将直接失败，而不是发送给下一个有效的memcached节点
         */
        private boolean failureMode;

        public enum SaslType {
            plain,
            cramMD5,
            typical;
        }
    }
}
